package com.AdvancedDemos.集合.单列集合;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ArrayList的常用函数 {

    public static void main(String[] args) {
        ArrayList list = new ArrayList();//无参构造函数


        System.out.println("------------------");
        //1.public boolean add(Object e)
        // 添加数据,元素可重复,成功返回true,失败返回false
        list.add("黑马");
        list.add(666);
        list.add(1.1);
        list.add("Java");
        System.out.println(list);//等价于list.toString()
        System.out.println(list.toString());

        ArrayList<String> list1 = new ArrayList</*从JDK1.7开始支持不写String*/>();//用泛型类指定arraylist集合中可以存储的变量类型
        // list1.add(1);//报错,需要的类型：String 提供的类型：int


        System.out.println("------------------");


        //2.public void add(int index,Object element)
        // 往指定索引处添加数据
        list.add(2, "这是2号索引位");
        System.out.println(list);


        System.out.println("------------------");
        //3.public Object get(int index)
        // 获取指定索引处的元素
        String s = (String) list.get(2);
        System.out.println(s);
        System.out.println(list.get(4));//实际上调用了list.get(4).toString()


        System.out.println("------------------");
        //4.public int size()
        // 返回集合中实际元素个数,不是ArrayList的容量
        System.out.println(list.size());

        System.out.println("------------------");
        //5.public Object remove(int index)
        // 删除指定索引处的元素,返回被删除的元素
        Object o = list.remove(1);
        System.out.println(o.toString());
        if (o != null) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        System.out.println(list);


        System.out.println("------------------");
        //6.public boolean remove(Object o)
        //删除指定的元素,返回删除是否成功
        list.add("黑马");//自动装箱变成包装类后再赋给add()做实参
        list.add(2, "黑马");
        System.out.println(list);
        if (list.remove("黑马")) {//只会从前往后删除第一个匹配的
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        System.out.println(list);
        if (list.remove("黑马")) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        System.out.println(list);


        System.out.println("------------------");
        //7.public Object set(int index,Object element)
        //修改指定索引处的值,返回原来的数据
        o = list.set(3, "黑马程序员");
        if (o != null) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        System.out.println(o.toString());
        System.out.println(list);


        System.out.println("------------------");

        //8.public boolean contains(Object o)
        //判断集合中是否有某元素
        String temp = "Java";
        if (list.contains(temp)) {
            System.out.println("含有" + temp);
            list.remove("Java");
            System.out.println("已删除" + temp);
        } else {
            System.out.println("不含有" + temp);
        }
        System.out.println(list);


        System.out.println("------------------");
        //9.使用比较器进行排序(支持自定义类型)list.sort(new Comparator...)
        ArrayList<String> stringList = new ArrayList<>();
        String[] strs = new String[]{"C", "B", "A", "D"};
        Collections.addAll(stringList, strs);
        stringList.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
                /*return 正数 表示 o1 > o2
                 * return 负数 表示 o1 < o2
                 * return 0   表示 o1 = o2*/
            }
        });
        System.out.println(stringList);//[A, B, C, D]
        /*
        //或者可以集合打开流再排序再收集成集合
        List<String> collect = stringList.stream().sorted().collect(Collectors.toList());
        System.out.println(collect);//[A, B, C, D]
        */
    }
}
